Data processing systems commonly execute a number of threads. The execution threads may be performed serially on single serial processor using time-slicing, in parallel on a number of linked processing cores, or a combination thereof. In many applications, there is a desire to pass data from one execution thread to another via a data channel. Moreover, the data may be passed in a specified pattern. For example, a first-in, first-out (FIFO) communication pattern is inherent in many applications, where data is entered sequentially into a storage medium and is removed from the storage medium in the same sequential order. Thus, the first data stored in the medium will be the first data taken out. A FIFO may be implemented explicitly as a buffer in hardware or it may implement in software. In other applications, the order of the data is not important, but the data is still generated by a producer and directed towards a consumer.
It is well known that processes and threads executing in a data processing system may share information through use of a common storage, either a physical storage medium or a virtual address space. However, in this kind of communication, information is not directed from one process or thread to another. Directed communication may be achieved using software in conjunction with a shared memory, but transmission of data from one thread to another consumes valuable processor resources (e.g., through locks, false sharing, etc.). These events conspire to increase latency, increase energy usage, and decrease overall performance. Similarly, transmission of data from one processing core to another requires communication through multiple layers of cache hierarchy.